package com.rem.chat.service;

import com.rem.chat.pojo.dataobject.GroupInfoDO;
import com.rem.chat.pojo.request.AddOrRemGroupUserRequest;
import com.rem.chat.pojo.response.GetGroupInfo4ChatResponse;
import com.rem.chat.pojo.response.GetGroupInfoResponse;
import com.rem.chat.pojo.response.LoadMyGroupResponse;
import com.rem.chat.service.dto.UserLoginDTO;
import com.rem.chat.service.enums.MessageTypeEnum;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * @author: Themberfue
 * @date: 2025/6/5 21:44
 * @description:
 */
public interface GroupService {
    /**
     * 创建/更新群组
     * @param groupInfoDO 群组信息
     * @param avatarFile 群组头像
     * @param avatarCover 群组头像缩略图
     * @return 是否创建/更新成功
     */
    Boolean saveGroup(GroupInfoDO groupInfoDO,
                      MultipartFile avatarFile,
                      MultipartFile avatarCover) throws IOException;


    /**
     * 查询用户创建的所有群组
     * @param userId 用户 id
     * @return 用户创建的所有群组
     */
    List<LoadMyGroupResponse> loadMyGroup(String userId);

    /**
     * 用户查询某个群组的详细信息
     * @param user 用户信息
     * @param groupId 群组 id
     * @return 群组的详细信息
     */
    GetGroupInfoResponse getGroupInfo(UserLoginDTO user, String groupId);

    /**
     * 查询聊天会话群聊详情
     * @param groupId 群组 id
     * @return 聊天会话群聊详情
     */
    GetGroupInfo4ChatResponse getGroupInfo4Chat(String groupId);

    /**
     * 加入群组
     * @param userId 用户id
     * @param param 请求信息
     */
    Boolean addGroup(String userId, AddOrRemGroupUserRequest param);

    /**
     * 离开群组
     * @param userId 用户id
     * @param param 请求信息
     * @param messageTypeEnum 消息类型
     */
    Boolean leaveGroup(String userId, AddOrRemGroupUserRequest param, MessageTypeEnum messageTypeEnum);

    /**
     * 离开群组
     * @param userId 用户id
     * @param groupId 群组id
     * @param messageTypeEnum 消息类型
     */
    Boolean leaveGroup(String userId, String groupId, MessageTypeEnum messageTypeEnum);
}
